/**
 * @Author: aesoper
 * @Description:
 * @File:  load
 * @Version: 1.0.0
 * @Date: 2020/7/22 17:06
 */

package conf

import (
	"errors"
	"github.com/asaskevich/govalidator"
	"github.com/spf13/viper"
	"path"
	"path/filepath"
	"strings"
)

var allowConfigTypeList = []string{"json", "toml", "yaml", "yml"}

// 加载配置
// configPath: 配置文件位置
// cfg: 输出的配置信息结构体, 必须是指针类型
func LoadConfig(configPath string, cfg interface{}) error {
	configType := strings.TrimLeft(path.Ext(configPath), ".")
	if !govalidator.IsIn(configType, allowConfigTypeList...) {
		return errors.New("配置文件格式错误，仅允许使用扩展为 .json | .toml | .yaml | .yml 的配置文件")
	}

	absPath, _ := filepath.Abs(configPath)

	viper.SetConfigType(configType)
	viper.SetConfigFile(absPath)

	if err := viper.ReadInConfig(); err != nil {
		return err
	}

	return viper.Unmarshal(&cfg)
}
